Skip to content

Add dd-autoinstrumentation CLI with LLM-native structured output#8313

Draft
bouwkast wants to merge 5 commits intomasterfrom
steven/auto-instrumentation-gen-cli-v2
Draft

Add dd-autoinstrumentation CLI with LLM-native structured output#8313
bouwkast wants to merge 5 commits intomasterfrom
steven/auto-instrumentation-gen-cli-v2

Conversation

@bouwkast
Copy link
Copy Markdown
Collaborator

@bouwkast bouwkast commented Mar 16, 2026

Summary of changes

Adds a new CLI tool (dd-autoinstrumentation) for auto-instrumentation code generation, designed
for scriptable and AI-agent-driven workflows with structured JSON output.

Reason for change

Creating integrations currently requires either the GUI or manual boilerplate. A CLI with structured
JSON output enables LLM agents to autonomously discover types/methods in an assembly, generate
instrumentation code, and recover from errors — all without human intervention.

Implementation details

New Datadog.AutoInstrumentation.Generator.Cli project with two commands:

inspect — assembly discovery

  • --list-types: lists all non-compiler-generated types with visibility, kind, method count
  • --list-methods <type>: lists instrumentable methods with parameters, async detection, overload
    index/count

generate — code generation

  • Resolves method from assembly/type/method with overload disambiguation (--overload-index,
    --parameter-types)
  • Smart defaults auto-detect async/static/void methods (disable with --no-auto-detect)
  • Configuration via --set key=value, --config '{json}', or --config-file path.json
  • Shortcut flags: --no-method-begin, --no-method-end, --async-method-end

--json flag (global) — all output (success and error) as structured JSON on stdout with:

  • Machine-readable error codes (FILE_NOT_FOUND, TYPE_NOT_FOUND, AMBIGUOUS_OVERLOAD,
    BAD_ASSEMBLY, etc.)
  • AMBIGUOUS_OVERLOAD includes full overload list in response data for immediate retry
  • inspect output includes overloadIndex/overloadCount so agents know upfront if disambiguation
    is needed

Nuke integrationRunInstrumentationGeneratorCli target with direct parameters and
--generator-args passthrough.

Documentation:

  • docs/development/InstrumentationGenerator.md — comprehensive reference for both GUI and CLI
  • docs/development/for-ai/InstrumentationGenerator-CLI.md — LLM-focused reference with full JSON
    schemas, error recovery patterns, and recommended autonomous workflow

Test coverage

No automated tests in this PR — this is a developer/AI tooling utility, not a production code path.
Manual testing performed against real assemblies for all commands, error paths, and JSON output.

Other details

#8312

🤖 Generated with Claude Code

@bouwkast bouwkast added the AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos label Mar 16, 2026
@bouwkast bouwkast force-pushed the steven/auto-instrumentation-gen-cli-v2 branch from 78661d7 to fc5fd18 Compare March 16, 2026 19:33
@pr-commenter
Copy link
Copy Markdown

pr-commenter bot commented Mar 16, 2026

Benchmarks

Benchmark execution time: 2026-03-16 20:19:01

Comparing candidate commit fc5fd18 in PR branch steven/auto-instrumentation-gen-cli-v2 with baseline commit 8803967 in branch master.

Found 5 performance improvements and 6 performance regressions! Performance is the same for 168 metrics, 13 unstable metrics.

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody netcoreapp3.1

  • 🟩 execution_time [-17.253ms; -11.460ms] or [-8.172%; -5.428%]

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody net6.0

  • 🟥 execution_time [+19.326ms; +23.874ms] or [+9.682%; +11.960%]

scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1

  • 🟥 execution_time [+10.593ms; +16.099ms] or [+5.363%; +8.150%]

scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool net6.0

  • 🟩 execution_time [-65.303µs; -60.550µs] or [-6.072%; -5.630%]
  • 🟩 throughput [+55.628op/s; +59.947op/s] or [+5.982%; +6.447%]

scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync net6.0

  • 🟩 throughput [+34272.586op/s; +41131.180op/s] or [+5.777%; +6.934%]

scenario:Benchmarks.Trace.GraphQLBenchmark.ExecuteAsync net6.0

  • 🟥 throughput [-50627.721op/s; -43554.069op/s] or [-9.077%; -7.809%]

scenario:Benchmarks.Trace.HttpClientBenchmark.SendAsync netcoreapp3.1

  • 🟥 throughput [-9132.300op/s; -7187.706op/s] or [-6.985%; -5.498%]

scenario:Benchmarks.Trace.ILoggerBenchmark.EnrichedLog net6.0

  • 🟥 execution_time [+11.326ms; +12.365ms] or [+5.666%; +6.186%]

scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1

  • 🟩 execution_time [-40.852ms; -38.656ms] or [-20.320%; -19.228%]

scenario:Benchmarks.Trace.SerilogBenchmark.EnrichedLog netcoreapp3.1

  • 🟥 throughput [-12383.985op/s; -9469.413op/s] or [-6.950%; -5.315%]

@dd-trace-dotnet-ci-bot
Copy link
Copy Markdown

dd-trace-dotnet-ci-bot bot commented Mar 16, 2026

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8313) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration71.74 ± (71.74 - 72.01) ms75.80 ± (75.72 - 76.03) ms+5.7%✅⬆️
.NET Framework 4.8 - Bailout
duration75.99 ± (75.84 - 76.12) ms79.98 ± (79.80 - 80.16) ms+5.3%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1053.52 ± (1054.87 - 1059.11) ms1093.80 ± (1093.50 - 1098.38) ms+3.8%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.51 ± (22.47 - 22.55) ms22.91 ± (22.86 - 22.95) ms+1.8%✅⬆️
process.time_to_main_ms84.25 ± (84.05 - 84.44) ms87.33 ± (87.10 - 87.55) ms+3.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.91 ± (10.90 - 10.91) MB10.91 ± (10.91 - 10.92) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.21 ± (22.17 - 22.24) ms22.90 ± (22.84 - 22.96) ms+3.1%✅⬆️
process.time_to_main_ms84.65 ± (84.43 - 84.87) ms89.27 ± (89.08 - 89.47) ms+5.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.95 ± (10.94 - 10.95) MB10.94 ± (10.93 - 10.94) MB-0.1%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms223.79 ± (222.49 - 225.08) ms230.05 ± (228.83 - 231.26) ms+2.8%✅⬆️
process.time_to_main_ms513.22 ± (512.09 - 514.35) ms532.72 ± (531.32 - 534.12) ms+3.8%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.84 ± (47.81 - 47.88) MB47.79 ± (47.76 - 47.82) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms20.94 ± (20.91 - 20.98) ms21.55 ± (21.50 - 21.59) ms+2.9%✅⬆️
process.time_to_main_ms72.04 ± (71.89 - 72.19) ms75.04 ± (74.87 - 75.21) ms+4.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.61 ± (10.61 - 10.62) MB10.63 ± (10.62 - 10.63) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.94 ± (20.90 - 20.98) ms21.51 ± (21.47 - 21.56) ms+2.7%✅⬆️
process.time_to_main_ms73.52 ± (73.34 - 73.70) ms76.60 ± (76.41 - 76.79) ms+4.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.73 ± (10.72 - 10.73) MB10.73 ± (10.73 - 10.74) MB+0.1%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms387.60 ± (385.33 - 389.87) ms382.08 ± (379.99 - 384.18) ms-1.4%
process.time_to_main_ms517.00 ± (515.88 - 518.13) ms535.44 ± (534.36 - 536.52) ms+3.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed49.88 ± (49.85 - 49.91) MB49.78 ± (49.75 - 49.81) MB-0.2%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.0%
.NET 8 - Baseline
process.internal_duration_ms19.16 ± (19.12 - 19.19) ms19.94 ± (19.90 - 19.99) ms+4.1%✅⬆️
process.time_to_main_ms71.08 ± (70.94 - 71.22) ms75.75 ± (75.58 - 75.92) ms+6.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.65 ± (7.65 - 7.66) MB7.68 ± (7.67 - 7.68) MB+0.3%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.25 ± (19.21 - 19.29) ms19.94 ± (19.89 - 19.99) ms+3.6%✅⬆️
process.time_to_main_ms72.73 ± (72.57 - 72.88) ms76.56 ± (76.37 - 76.75) ms+5.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.73 ± (7.72 - 7.74) MB7.74 ± (7.73 - 7.75) MB+0.0%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms305.99 ± (303.67 - 308.30) ms307.31 ± (305.12 - 309.51) ms+0.4%✅⬆️
process.time_to_main_ms475.66 ± (474.87 - 476.45) ms495.84 ± (495.02 - 496.67) ms+4.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.95 ± (36.93 - 36.98) MB36.96 ± (36.94 - 36.98) MB+0.0%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)-0.6%

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration188.55 ± (188.52 - 189.09) ms188.86 ± (188.92 - 189.60) ms+0.2%✅⬆️
.NET Framework 4.8 - Bailout
duration191.92 ± (191.86 - 192.22) ms192.24 ± (192.21 - 192.60) ms+0.2%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1125.77 ± (1124.60 - 1133.46) ms1124.27 ± (1126.92 - 1134.78) ms-0.1%
.NET Core 3.1 - Baseline
process.internal_duration_ms183.86 ± (183.55 - 184.17) ms184.45 ± (184.17 - 184.73) ms+0.3%✅⬆️
process.time_to_main_ms79.11 ± (78.94 - 79.27) ms79.15 ± (78.98 - 79.32) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.12 ± (16.05 - 16.20) MB16.11 ± (16.09 - 16.14) MB-0.1%
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (20 - 20)+0.3%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms183.46 ± (183.22 - 183.70) ms183.74 ± (183.51 - 183.97) ms+0.2%✅⬆️
process.time_to_main_ms80.28 ± (80.19 - 80.37) ms80.35 ± (80.26 - 80.44) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.29 ± (16.24 - 16.35) MB16.04 ± (15.92 - 16.15) MB-1.6%
runtime.dotnet.threads.count21 ± (20 - 21)20 ± (20 - 20)-3.4%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms388.23 ± (387.09 - 389.38) ms388.90 ± (387.43 - 390.36) ms+0.2%✅⬆️
process.time_to_main_ms497.49 ± (496.49 - 498.49) ms499.77 ± (498.76 - 500.78) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed57.37 ± (57.15 - 57.58) MB57.81 ± (57.59 - 58.03) MB+0.8%✅⬆️
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.1%
.NET 6 - Baseline
process.internal_duration_ms188.14 ± (187.89 - 188.38) ms188.52 ± (188.26 - 188.78) ms+0.2%✅⬆️
process.time_to_main_ms68.69 ± (68.60 - 68.78) ms69.09 ± (68.97 - 69.21) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed15.62 ± (15.44 - 15.79) MB16.21 ± (16.08 - 16.34) MB+3.8%✅⬆️
runtime.dotnet.threads.count18 ± (17 - 18)18 ± (18 - 18)+3.5%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms187.18 ± (187.00 - 187.36) ms187.81 ± (187.60 - 188.03) ms+0.3%✅⬆️
process.time_to_main_ms69.77 ± (69.71 - 69.83) ms69.91 ± (69.85 - 69.97) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed15.43 ± (15.25 - 15.60) MB15.96 ± (15.78 - 16.13) MB+3.4%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 19)19 ± (18 - 19)+1.0%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms594.73 ± (591.47 - 597.99) ms592.94 ± (589.17 - 596.71) ms-0.3%
process.time_to_main_ms500.57 ± (499.92 - 501.22) ms503.24 ± (502.38 - 504.10) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed61.39 ± (61.29 - 61.48) MB61.38 ± (61.28 - 61.47) MB-0.0%
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.1%
.NET 8 - Baseline
process.internal_duration_ms185.41 ± (185.20 - 185.62) ms185.33 ± (185.03 - 185.63) ms-0.0%
process.time_to_main_ms68.21 ± (68.04 - 68.38) ms68.43 ± (68.28 - 68.59) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.62 ± (11.51 - 11.72) MB11.60 ± (11.49 - 11.71) MB-0.2%
runtime.dotnet.threads.count17 ± (17 - 18)17 ± (17 - 18)+0.4%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms184.93 ± (184.77 - 185.08) ms184.76 ± (184.56 - 184.96) ms-0.1%
process.time_to_main_ms69.19 ± (69.14 - 69.25) ms69.32 ± (69.24 - 69.39) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.54 ± (11.43 - 11.65) MB11.35 ± (11.23 - 11.47) MB-1.6%
runtime.dotnet.threads.count18 ± (18 - 19)18 ± (18 - 18)-2.6%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms519.91 ± (517.17 - 522.65) ms520.97 ± (518.46 - 523.49) ms+0.2%✅⬆️
process.time_to_main_ms458.27 ± (457.61 - 458.94) ms461.71 ± (460.87 - 462.54) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.69 ± (50.66 - 50.72) MB50.65 ± (50.62 - 50.68) MB-0.1%
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.1%
Comparison explanation

Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (76ms)  : 74, 78
    master - mean (72ms)  : 70, 74

    section Bailout
    This PR (8313) - mean (80ms)  : 78, 82
    master - mean (76ms)  : 75, 77

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (1,096ms)  : 1062, 1130
    master - mean (1,057ms)  : 1027, 1087

Loading
FakeDbCommand (.NET Core 3.1)
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (117ms)  : 113, 121
    master - mean (114ms)  : 111, 116

    section Bailout
    This PR (8313) - mean (119ms)  : 116, 122
    master - mean (113ms)  : 111, 116

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (800ms)  : 781, 820
    master - mean (776ms)  : 754, 797

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (103ms)  : 100, 106
    master - mean (99ms)  : 96, 102

    section Bailout
    This PR (8313) - mean (105ms)  : 101, 109
    master - mean (101ms)  : 98, 103

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (947ms)  : 917, 977
    master - mean (932ms)  : 895, 969

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (104ms)  : 100, 107
    master - mean (98ms)  : 95, 100

    section Bailout
    This PR (8313) - mean (105ms)  : 102, 107
    master - mean (100ms)  : 97, 102

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (835ms)  : 802, 868
    master - mean (812ms)  : 774, 849

Loading
HttpMessageHandler (.NET Framework 4.8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (189ms)  : 186, 192
    master - mean (189ms)  : 186, 192

    section Bailout
    This PR (8313) - mean (192ms)  : 191, 194
    master - mean (192ms)  : 190, 194

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (1,131ms)  : 1074, 1187
    master - mean (1,129ms)  : 1080, 1178

Loading
HttpMessageHandler (.NET Core 3.1)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (271ms)  : 267, 276
    master - mean (271ms)  : 268, 274

    section Bailout
    This PR (8313) - mean (272ms)  : 269, 275
    master - mean (271ms)  : 269, 274

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (919ms)  : 898, 941
    master - mean (915ms)  : 898, 932

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (265ms)  : 261, 270
    master - mean (265ms)  : 261, 268

    section Bailout
    This PR (8313) - mean (265ms)  : 263, 268
    master - mean (265ms)  : 262, 267

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (1,125ms)  : 1069, 1181
    master - mean (1,126ms)  : 1080, 1172

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8313) - mean (263ms)  : 259, 267
    master - mean (263ms)  : 259, 268

    section Bailout
    This PR (8313) - mean (263ms)  : 261, 266
    master - mean (263ms)  : 261, 266

    section CallTarget+Inlining+NGEN
    This PR (8313) - mean (1,014ms)  : 980, 1049
    master - mean (1,010ms)  : 974, 1047

Loading

bouwkast and others added 5 commits March 31, 2026 10:53
Extract the generation engine, configuration models, and resource templates
from the GUI into a standalone Core library. The GUI now delegates to Core,
reducing MainViewModel.Editor.cs from ~300 lines of inline logic to ~109 lines.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add dd-autoinstrumentation CLI that uses the Core library to generate
integration boilerplate from the command line. Includes --set key=value
configuration, --config-file support, --json output, and Nuke build
integration via RunInstrumentationGeneratorCli target.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… assembly inspection

Add global --json flag, unified JSON error envelope with machine-readable error codes,
inspect subcommand for type/method discovery, and structured --list-keys output.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… workflow

Update InstrumentationGenerator.md with inspect command, structured error handling,
and LLM usage sections. Add dedicated LLM reference doc with full JSON schemas,
error recovery patterns, and step-by-step autonomous workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wrap AssemblyBrowser construction in try-catch so corrupted or non-.NET
DLLs return a structured error instead of crashing the CLI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@bouwkast bouwkast force-pushed the steven/auto-instrumentation-gen-cli-v2 branch from fc5fd18 to dd7cbfc Compare April 1, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant